/* Copyright (c) 2010 Daniel Doubrovkine, All Rights Reserved
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.  
 */
package com.jpexs.decompiler.flash.gui.player.jna.platform.win32;

import com.jpexs.decompiler.flash.gui.player.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.ByReference;
import com.sun.jna.win32.StdCallLibrary;

/**
 * This module contains the function prototypes and constant, type and structure
 * definitions for the Windows 32-Bit Registry API. Ported from WinReg.h
 * Microsoft Windows SDK 6.0A.
 *
 * @author dblock[at]dblock.org
 */
public interface WinReg extends StdCallLibrary {

   public static class HKEY extends HANDLE {

      public HKEY() {
      }

      public HKEY(Pointer p) {
         super(p);
      }

      public HKEY(int value) {
         super(new Pointer(value));
      }
   }

   public static class HKEYByReference extends ByReference {

      public HKEYByReference() {
         this(null);
      }

      public HKEYByReference(HKEY h) {
         super(Pointer.SIZE);
         setValue(h);
      }

      public void setValue(HKEY h) {
         getPointer().setPointer(0, h != null ? h.getPointer() : null);
      }

      public HKEY getValue() {
         Pointer p = getPointer().getPointer(0);
         if (p == null) {
            return null;
         }
         if (WinBase.INVALID_HANDLE_VALUE.getPointer().equals(p)) {
            return (HKEY) WinBase.INVALID_HANDLE_VALUE;
         }
         HKEY h = new HKEY();
         h.setPointer(p);
         return h;
      }
   }
   HKEY HKEY_CLASSES_ROOT = new HKEY(0x80000000);
   HKEY HKEY_CURRENT_USER = new HKEY(0x80000001);
   HKEY HKEY_LOCAL_MACHINE = new HKEY(0x80000002);
   HKEY HKEY_USERS = new HKEY(0x80000003);
   HKEY HKEY_PERFORMANCE_DATA = new HKEY(0x80000004);
   HKEY HKEY_PERFORMANCE_TEXT = new HKEY(0x80000050);
   HKEY HKEY_PERFORMANCE_NLSTEXT = new HKEY(0x80000060);
   HKEY HKEY_CURRENT_CONFIG = new HKEY(0x80000005);
   HKEY HKEY_DYN_DATA = new HKEY(0x80000006);
}
